package oa.hleast.common.wx.controller;

import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage;
import oa.hleast.common.wx.config.WeAppConfig;
import oa.hleast.common.result.Result;
import io.swagger.annotations.Api;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;

@Api(tags = "测试微信小程序消息")
@RestController
@RequestMapping("/api.app/v1/msg")
@AllArgsConstructor
@Slf4j
public class TestMsgController {

    private WeAppConfig weAppConfig;

    @GetMapping("/testDurableMsg")
    public Result testDurableMsg(String openId, String templateId) {
        WxMaService wxMaService = weAppConfig.getWxMaService(weAppConfig.getAppid());
        WxMaSubscribeMessage subscribeMessage = new WxMaSubscribeMessage();

        //跳转小程序页面路径
        subscribeMessage.setPage("pages/index/index");
        //模板消息id
        subscribeMessage.setTemplateId(templateId);
        //给谁推送 用户的openid （可以调用根据code换openid接口)
        subscribeMessage.setToUser(openId);

        //==========================================创建一个参数集合========================================================
        ArrayList<WxMaSubscribeMessage.MsgData> wxMaSubscribeData = new ArrayList<>();

//        订阅消息参数值内容限制说明
//              ---摘自微信小程序官方：https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html
//        参数类别 	参数说明 	参数值限制 	   说明
//        thing.DATA 	事物 	20个以内字符 	可汉字、数字、字母或符号组合
//        number.DATA 	数字 	32位以内数字 	只能数字，可带小数
//        letter.DATA 	字母 	32位以内字母 	只能字母
//        symbol.DATA 	符号 	5位以内符号 	只能符号
//        character_string.DATA 	字符串 	32位以内数字、字母或符号 	可数字、字母或符号组合
//        time.DATA 	时间 	24小时制时间格式（支持+年月日） 	例如：15:01，或：2019年10月1日 15:01
//        date.DATA 	日期 	年月日格式（支持+24小时制时间） 	例如：2019年10月1日，或：2019年10月1日 15:01
//        amount.DATA 	金额 	1个币种符号+10位以内纯数字，可带小数，结尾可带“元” 	可带小数
//        phone_number.DATA 	电话 	17位以内，数字、符号 	电话号码，例：+86-0766-66888866
//        car_number.DATA 	车牌 	8位以内，第一位与最后一位可为汉字，其余为字母或数字 	车牌号码：粤A8Z888挂
//        name.DATA 	姓名 	10个以内纯汉字或20个以内纯字母或符号 	中文名10个汉字内；纯英文名20个字母内；中文和字母混合按中文名算，10个字内
//        phrase.DATA 	汉字 	5个以内汉字 	5个以内纯汉字，例如：配送中

        //第一个内容： 奖品名称
        WxMaSubscribeMessage.MsgData wxMaSubscribeData1 = new WxMaSubscribeMessage.MsgData();
        wxMaSubscribeData1.setName("thing1");
        wxMaSubscribeData1.setValue("该交作业了");
        //每个参数 存放到大集合中
        wxMaSubscribeData.add(wxMaSubscribeData1);

        // 第二个内容：用户昵称
        WxMaSubscribeMessage.MsgData wxMaSubscribeData2 = new WxMaSubscribeMessage.MsgData();
        wxMaSubscribeData2.setName("thing2");
        wxMaSubscribeData2.setValue("不问收获，但问耕耘！天道酬勤。");
        wxMaSubscribeData.add(wxMaSubscribeData2);

        // 第三个内容：领取方式
        WxMaSubscribeMessage.MsgData wxMaSubscribeData3 = new WxMaSubscribeMessage.MsgData();
        wxMaSubscribeData3.setName("time3");
        wxMaSubscribeData3.setValue("2021-07-12");
        wxMaSubscribeData.add(wxMaSubscribeData3);

        // 第四个内容：专属老师
        WxMaSubscribeMessage.MsgData wxMaSubscribeData4 = new WxMaSubscribeMessage.MsgData();
        wxMaSubscribeData4.setName("thing4");
        wxMaSubscribeData4.setValue("华量软件");
        wxMaSubscribeData.add(wxMaSubscribeData4);

        // 第五个内容：温馨提醒
        WxMaSubscribeMessage.MsgData wxMaSubscribeData5 = new WxMaSubscribeMessage.MsgData();
        wxMaSubscribeData5.setName("thing4");
        wxMaSubscribeData5.setValue("有高水平的集体，才有高水平的个人");
        wxMaSubscribeData.add(wxMaSubscribeData5);

        //把集合给大的data
        subscribeMessage.setData(wxMaSubscribeData);
        //=========================================封装参数集合完毕========================================================

        try {
            //进行推送
            wxMaService.getMsgService().sendSubscribeMsg(subscribeMessage);
            return Result.success();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return Result.failed();
    }

    @GetMapping("/testOneMsg")
    public Result testOneMsg(String openId, String templateId) {
        WxMaService wxMaService = weAppConfig.getWxMaService(weAppConfig.getAppid());
        WxMaSubscribeMessage subscribeMessage = new WxMaSubscribeMessage();

        //跳转小程序页面路径
        subscribeMessage.setPage("pages/index/index");
        //模板消息id
        subscribeMessage.setTemplateId(templateId);
        //给谁推送 用户的openid （可以调用根据code换openid接口)
        subscribeMessage.setToUser(openId);

        //==========================================创建一个参数集合========================================================
        ArrayList<WxMaSubscribeMessage.MsgData> wxMaSubscribeData = new ArrayList<>();

//        订阅消息参数值内容限制说明
//              ---摘自微信小程序官方：https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html
//        参数类别 	参数说明 	参数值限制 	   说明
//        thing.DATA 	事物 	20个以内字符 	可汉字、数字、字母或符号组合
//        number.DATA 	数字 	32位以内数字 	只能数字，可带小数
//        letter.DATA 	字母 	32位以内字母 	只能字母
//        symbol.DATA 	符号 	5位以内符号 	只能符号
//        character_string.DATA 	字符串 	32位以内数字、字母或符号 	可数字、字母或符号组合
//        time.DATA 	时间 	24小时制时间格式（支持+年月日） 	例如：15:01，或：2019年10月1日 15:01
//        date.DATA 	日期 	年月日格式（支持+24小时制时间） 	例如：2019年10月1日，或：2019年10月1日 15:01
//        amount.DATA 	金额 	1个币种符号+10位以内纯数字，可带小数，结尾可带“元” 	可带小数
//        phone_number.DATA 	电话 	17位以内，数字、符号 	电话号码，例：+86-0766-66888866
//        car_number.DATA 	车牌 	8位以内，第一位与最后一位可为汉字，其余为字母或数字 	车牌号码：粤A8Z888挂
//        name.DATA 	姓名 	10个以内纯汉字或20个以内纯字母或符号 	中文名10个汉字内；纯英文名20个字母内；中文和字母混合按中文名算，10个字内
//        phrase.DATA 	汉字 	5个以内汉字 	5个以内纯汉字，例如：配送中

        //第一个内容： 奖品名称
        WxMaSubscribeMessage.MsgData wxMaSubscribeData1 = new WxMaSubscribeMessage.MsgData();
        wxMaSubscribeData1.setName("name1");
        wxMaSubscribeData1.setValue("任成龙");
        //每个参数 存放到大集合中
        wxMaSubscribeData.add(wxMaSubscribeData1);

        // 第二个内容：用户昵称
        WxMaSubscribeMessage.MsgData wxMaSubscribeData2 = new WxMaSubscribeMessage.MsgData();
        wxMaSubscribeData2.setName("thing2");
        wxMaSubscribeData2.setValue("审核通过");
        wxMaSubscribeData.add(wxMaSubscribeData2);

        // 第三个内容：领取方式
        WxMaSubscribeMessage.MsgData wxMaSubscribeData3 = new WxMaSubscribeMessage.MsgData();
        wxMaSubscribeData3.setName("thing3");
        wxMaSubscribeData3.setValue("报名的活动");
        wxMaSubscribeData.add(wxMaSubscribeData3);

        // 第四个内容：专属老师
        WxMaSubscribeMessage.MsgData wxMaSubscribeData4 = new WxMaSubscribeMessage.MsgData();
        wxMaSubscribeData4.setName("date4");
        wxMaSubscribeData4.setValue("2021-07-12");
        wxMaSubscribeData.add(wxMaSubscribeData4);

        // 第五个内容：温馨提醒
        WxMaSubscribeMessage.MsgData wxMaSubscribeData5 = new WxMaSubscribeMessage.MsgData();
        wxMaSubscribeData5.setName("thing4");
        wxMaSubscribeData5.setValue("有高水平的集体，才有高水平的个人");
        wxMaSubscribeData.add(wxMaSubscribeData5);

        //把集合给大的data
        subscribeMessage.setData(wxMaSubscribeData);
        //=========================================封装参数集合完毕========================================================

        try {
            //进行推送
            wxMaService.getMsgService().sendSubscribeMsg(subscribeMessage);
            return Result.success();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return Result.failed();
    }
}
